// #ifdef H5 || APP-PLUS || MP-TOUTIAO
// 引入js加密
import CryptoJS from "crypto-js";
// 加密随便写的key
const secretKey = "abcdefghijklmnopqrstuvwxyz";
// #endif

// #ifdef H5 || APP-PLUS || MP-TOUTIAO
/**
 * 加密方法
 * @param value
 * @returns {string}
 */
function encrypt(value) {
	// 进行AES加密
	return CryptoJS.AES.encrypt(value, secretKey).toString() || "";
}

/**
 * 解密方法
 * @param value
 * @returns {string}
 */
function decrypt(value) {
	if (!value) return "";
	// 进行AES解密
	const bytes = CryptoJS.AES.decrypt(value, secretKey) || "";
	const originalText = bytes.toString(CryptoJS.enc.Utf8) || null;
	return JSON.parse(originalText);
}
// #endif

/**
 * @description 检测数据类型
 * @param target 检测的目标
 * @returns {string}
 */
function checkType(target) {
	return Object.prototype.toString
		.call(target)
		.slice(8, -1)
		.toLowerCase();
}

/**
 * @description 同步加密并设置缓存数据
 * @param key 缓存的key值
 * @param value 缓存的value值
 */
export function setStorageSync(key, value) {
	try {
		// json序列化
		value = JSON.stringify(value ?? "");
		// #ifdef H5 || APP-PLUS || MP-TOUTIAO
		// 进行AES加密
		const encryptValue = encrypt(value);
		// 进行数据缓存
		uni.setStorageSync(key, encryptValue);
		// #endif
		// #ifndef H5 || APP-PLUS || MP-TOUTIAO
		// 进行数据缓存
		uni.setStorageSync(key, value);
		// #endif
	} catch (err) {
		console.log("同步加密并设置缓存数据失败", err);
	}
}

/**
 * @description 同步解密并获取缓存数据
 * @param key 缓存的key值
 * @returns {string|any}
 */
export function getStorageSync(key) {
	try {
		// 获取数据缓存
		const value = uni.getStorageSync(key);
		if (!value) return "";
		// #ifdef H5 || APP-PLUS || MP-TOUTIAO
		return decrypt(value);
		// #endif
		// #ifndef H5 || APP-PLUS || MP-TOUTIAO
		// 解析json
		return JSON.parse(value);
		// #endif
	} catch (err) {
		console.log("同步解密并获取缓存数据失败", err);
		return "";
	}
}

/**
 * @description 对url参数进行加密并编码
 * @param data 需要加密并编码的url参数
 * @returns {string}
 */
export function encodeUrlParams(data) {
	// json序列化
	data = JSON.stringify(data || "");
	// #ifdef H5 || APP-PLUS || MP-TOUTIAO
	// 进行AES加密
	const encryptValue = encrypt(data);
	// AES加密后在进行参数编码
	return encodeURIComponent(encryptValue);
	// #endif
	// #ifndef H5 || APP-PLUS || MP-TOUTIAO
	// 进行参数编码
	return encodeURIComponent(data);
	// #endif
}

/**
 * @description 对url参数进行解密并解码
 * @param data 需要解密并解码的url参数
 * @returns {any}
 */
export function decodeUrlParams(data) {
	try {
		// url参数先解码
		data = decodeURIComponent(data);
		// #ifdef H5 || APP-PLUS || MP-TOUTIAO
		// 进行AES解密
		return decrypt(data);
		// #endif
		// #ifndef H5 || APP-PLUS || MP-TOUTIAO
		// 解析json
		return JSON.parse(data);
		// #endif
	} catch (err) {
		console.log("解密并解码URL出错", err);
		return "";
	}
}

/**
 * @description 页面传递参数
 * @param data 传递的参数
 * @returns {string}
 */
export function sendMsg(data) {
	const type = checkType(data);
	switch (type) {
		case "object":
			return Object.keys(data).length > 0
				? encodeUrlParams(data)
				: encodeUrlParams({});
		case "array":
			return data.length > 0 ? encodeUrlParams(data) : encodeUrlParams([]);
		case "string":
		case "number":
		case "boolean":
			return encodeUrlParams(data);
		default:
			return encodeUrlParams("");
	}
}

/**
 * @description 页面获取参数
 * @param data 获取的参数
 * @returns {any}
 */
export function getMsg(data) {
	return decodeUrlParams(data);
}
